package com.sunducation.wts.viewmodel

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import androidx.lifecycle.ViewModelProvider

//为了解决异步调用内存泄漏，瞬时数据丢失的问题

//不用持有任何View对象不需要绑定View。为Activity 、Fragment存储数据，直到完全销毁。
// 尤其是屏幕旋转的场景，常用的方法都是通过onSaveInstanceState()保存数据，再在onCreate()中恢复，真的是很麻烦。
//其次因为ViewModel存储了数据，所以ViewModel可以在当前Activity的Fragment中实现数据共享。



/*
*
* ViewModel的作用

1、ViewModel 用于管理与界面（Activity、Fragment）相关的数据。

2、ViewModel让数据可在发生屏幕旋转等配置更改后仍能继续存在。

3、ViewModel 让Activity与Fragment共享数据更方便。

ViewModel作为JetPack中一个重要部件，本身并不复杂。ViewModel总结起来就一个功能：
* 保存数据，并且在ViewModel中的数据，不会因为配置变化（横竖屏转换）而丢失，
* 只有在Activity真正被销毁的时候，才会真正销毁数据。
* */
class MainActivity : AppCompatActivity() {
    //旋转屏幕时，数字不会清零
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //iniComponent()
        iniComponent2()
    }

    private fun iniComponent() {
        val  textView : TextView = findViewById(R.id.textview);
        val timerViewModel : TimerViewModel =  ViewModelProvider(this).get(TimerViewModel::class.java)
        timerViewModel.setOnTimeChangeListener(object : TimerViewModel.OnTimeChangeListener {
            override fun onTimeChanged(second: Int) {
                runOnUiThread(object : Runnable {
                    override fun run() {
                        textView.setText("TIME:"+second);
                    }
                });
            }

        });
        timerViewModel.startTiming();
    }

    private fun iniComponent2() {
        val  textView : TextView = findViewById(R.id.textview);
        val timerViewModel2 : TimerViewModel2 =  ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(application)).get(TimerViewModel2::class.java)
        timerViewModel2.setOnTimeChangeListener(object : TimerViewModel2.OnTimeChangeListener {
            override fun onTimeChanged(second: Int) {
                runOnUiThread(object : Runnable {
                    override fun run() {
                        textView.setText("TIME:"+second);
                    }
                });
            }

        });
        timerViewModel2.startTiming();
    }
}
